package org.dezenho.client.RN;

import java.awt.Point;
import java.rmi.RemoteException;

import org.dezenho.client.IU.DesenhistaObserver;
import org.dezenho.client.SO.DezenhoClient;

/**
 * Classe responsavel por controlar o desenhista e as acoes associadas a ele
 * 
 * @author marcelasobrinhopereira
 * 
 */
public class Desenhista implements DesenhistaSubject {

	private Point[] desenho;
	private Integer idPartida;
	private DesenhistaObserver desenhistaObserver;
	int tempoRestante;

	/**
	 * Metodo responsavel por solicitar ao servidor que inicie a rodada
	 */
	public void comecaRodada() {
		try {
			DezenhoClient.getInstance().getServer().controlaRodada(
					getIdPartida());
		} catch (RemoteException e) {
			DezenhoClient.getInstance().getDezenhoTelaClient()
					.apresentaMensagem("Erro na conexao");
			e.printStackTrace();
		}
	}

	/**
	 * Metodo responsavel por atualizar o tempo restante
	 * 
	 * @param tempoRestante
	 * @return
	 */
	public Point[] atualizaDesenhista(Integer tempoRestante) {
		setTempoRestante(tempoRestante);
		notifyTempoRestante();
		return desenho;
	}

	/**
	 * Metodo responsavel trocar a tela atual pela tela de Desenhista e
	 * inicia-la com os parametros fornecidos
	 * 
	 * @param tempoTotal
	 * @param palavra
	 * @param multiplicador
	 * @param idPartida
	 */
	public void inicializaDesenhista(int tempoTotal, String palavra,
			int multiplicador, Integer idPartida) {
		DezenhoClient.getInstance().getDezenhoTelaClient()
				.inicializaTelaDesenhista(tempoTotal, palavra, multiplicador);
		setIdPartida(idPartida);
	}

	/**
	 * Metodo responsavel por notificar a tela que o tempo restante Metodo do
	 * padrao observer
	 */
	public void notifyTempoRestante() {
		getDesenhistaObserver().updateTempoRestante();
	}

	// Metodos de acesso

	public int getTempoRestante() {
		return tempoRestante;
	}

	public void setTempoRestante(int tempoRestante) {
		this.tempoRestante = tempoRestante;
	}

	public Point[] getDesenho() {
		return desenho;
	}

	public void setDesenho(Point[] desenho) {
		this.desenho = desenho;
	}

	protected Integer getIdPartida() {
		return idPartida;
	}

	protected void setIdPartida(Integer idPartida) {
		this.idPartida = idPartida;
	}

	public void setDesenhistaObserver(DesenhistaObserver desenhistaObserver) {
		this.desenhistaObserver = desenhistaObserver;
	}

	public DesenhistaObserver getDesenhistaObserver() {
		return desenhistaObserver;
	}

}
